package com.example.demo.designMode.singleton;
/**
* @description: TODO 静态内部类 给予类加载机制保障单例模式
* @author 杨镇宇
* @date 2022/2/28 15:59
* @version 1.0
*/

public class ClassSingletonTest {
    public static void main(String[] args) {
        new Thread(()->{
            System.out.println(ClassSingleton.getInstance());
        }).start();
        new Thread(()->{
            System.out.println(ClassSingleton.getInstance());

        }).start();
    }
}
/**
 * 保证线程安全的同时
 * 有点懒汉模式的味道，即不调用这个getInstance方法时，就不会加载这个类InnerClassSingletonHolder，就不会浪费空间
 * 而饿汉模式，就会马上加载，会浪费空间，但是它保证单例模式跟饿汉模式一样都是给予JVM的类加载机制保证单例模式。
 * 所以有点兼容懒汉模式和饿汉模式的味道，因此使用的话，推荐使用静态内部类模式来写单例模式。
 * */
class  ClassSingleton{
    private static class InnerClassSingletonHolder{
        private static ClassSingleton instance = new ClassSingleton();
    }
    private ClassSingleton(){

    }
    public static ClassSingleton getInstance(){
        return InnerClassSingletonHolder.instance;
    }
}